//
//  CouponTheme.swift
//  CMB250716
//
//  Created by Assistant on 2025-01-02.
//

import SwiftUI

/// 优惠券主题配置 - 大师级设计配色方案
struct CouponTheme {
    
    /// 优惠券类型枚举 - 基于优惠券标题的智能匹配
    enum CouponType: String, CaseIterable {
        // 新会员系列 - 活力橙红渐变
        case newMemberDiscount = "新会员立减福利"
        case newMemberDiscountEn = "New Member Discount"
        
        // 燃动打卡系列 - 火焰红橙渐变
        case fuelUpStreak = "燃动打卡券"
        case fuelUpStreakEn = "Fuel Up Streak"
        
        // 周末专享系列 - 深蓝紫渐变
        case weekendSpecial = "会员周末专享"
        case weekendSpecialEn = "Weekend Member Exclusive"
        
        // HighBall专享系列 - 琥珀金渐变
        case highballSpecial = "会员 HighBall专享"
        case highballSpecialEn = "Member HighBall Exclusive"
        
        // 咖啡系列 - 咖啡棕色渐变（用户特别要求）
        case welcomeCoffee = "小牛欢迎咖啡"
        case welcomeCoffeeEn = "Bull Welcome Coffee"
        
        // 神秘礼品系列 - 神秘紫黑渐变
        case mysteryGift = "小牛「神秘礼品」"
        case mysteryGiftEn = "Bull Mystery Gift"
        
        // 生日专享系列 - 粉红庆祝渐变
        case birthdaySpecial = "生日月份专属福利"
        case birthdaySpecialEn = "Birthday Month Exclusive"
        
        // 会员信息完善系列 - 清新绿蓝渐变
        case memberInfoComplete = "会员信息完善礼券"
        case memberInfoCompleteEn = "Member Info Completion"
        
        // 高级会员系列 - 奢华紫金渐变
        case vibeRegentExclusive = "紫域主理人专享"
        case vibeRegentExclusiveEn = "Vibe Regent Exclusive"
        
        // 橙燃玩家系列 - 炽热橙黄渐变
        case hypeBlaze = "橙燃玩家专享"
        case hypeBlazeEn = "Hype Blaze Exclusive"
        
        // 现金券系列 - 金银橙三色渐变
        case cashVoucher1 = "现金券 1"
        case cashVoucher1En = "Cash Voucher 1"
        case cashVoucher2 = "现金券 2"
        case cashVoucher2En = "Cash Voucher 2"
        case cashVoucher3 = "现金券 3"
        case cashVoucher3En = "Cash Voucher 3"
        
        /// 获取优惠券渐变色 - 大师级配色设计
        var gradientColors: [Color] {
            switch self {
            // 新会员 - 活力橙红，象征新的开始
            case .newMemberDiscount, .newMemberDiscountEn:
                return [
                    Color(red: 1.0, green: 0.6, blue: 0.2),   // 活力橙
                    Color(red: 0.9, green: 0.3, blue: 0.1)    // 深橙红
                ]
                
            // 燃动打卡 - 火焰红橙，象征激情与动力
            case .fuelUpStreak, .fuelUpStreakEn:
                return [
                    Color(red: 0.9, green: 0.2, blue: 0.1),   // 火焰红
                    Color(red: 1.0, green: 0.5, blue: 0.0)    // 炽热橙
                ]
                
            // 周末专享 - 深蓝紫，象征休闲与品质（优化亮度）
            case .weekendSpecial, .weekendSpecialEn:
                return [
                    Color(red: 0.3, green: 0.5, blue: 0.9),   // 提亮深蓝
                    Color(red: 0.5, green: 0.3, blue: 0.8)    // 优化优雅紫
                ]
                
            // HighBall专享 - 琥珀金，象征高端酒类
            case .highballSpecial, .highballSpecialEn:
                return [
                    Color(red: 0.8, green: 0.6, blue: 0.2),   // 琥珀金
                    Color(red: 0.6, green: 0.4, blue: 0.1)    // 深金棕
                ]
                
            // 咖啡系列 - 咖啡棕色渐变（优化温暖感）
            case .welcomeCoffee, .welcomeCoffeeEn:
                return [
                    Color(red: 0.7, green: 0.5, blue: 0.3),   // 提亮咖啡棕
                    Color(red: 0.5, green: 0.3, blue: 0.2)    // 优化深咖啡
                ]
                
            // 神秘礼品 - 神秘紫黑，象征未知与惊喜（优化对比度）
            case .mysteryGift, .mysteryGiftEn:
                return [
                    Color(red: 0.4, green: 0.2, blue: 0.6),   // 提亮神秘紫
                    Color(red: 0.2, green: 0.1, blue: 0.3)    // 优化深紫黑
                ]
                
            // 生日专享 - 粉红庆祝，象征喜悦与庆祝
            case .birthdaySpecial, .birthdaySpecialEn:
                return [
                    Color(red: 1.0, green: 0.4, blue: 0.7),   // 庆祝粉
                    Color(red: 0.8, green: 0.2, blue: 0.5)    // 深玫红
                ]
                
            // 会员信息完善 - 清新绿蓝，象征成长与完善
            case .memberInfoComplete, .memberInfoCompleteEn:
                return [
                    Color(red: 0.2, green: 0.7, blue: 0.5),   // 清新绿
                    Color(red: 0.1, green: 0.5, blue: 0.7)    // 海洋蓝
                ]
                
            // 紫域主理人 - 奢华紫金，象征尊贵与权威
            case .vibeRegentExclusive, .vibeRegentExclusiveEn:
                return [
                    Color(red: 0.5, green: 0.2, blue: 0.8),   // 皇室紫
                    Color(red: 0.7, green: 0.5, blue: 0.2)    // 奢华金
                ]
                
            // 橙燃玩家 - 炽热橙黄，象征活力与激情
            case .hypeBlaze, .hypeBlazeEn:
                return [
                    Color(red: 1.0, green: 0.5, blue: 0.0),   // 炽热橙
                    Color(red: 1.0, green: 0.8, blue: 0.0)    // 明亮黄
                ]
                
            // 现金券 1 - 金色渐变，象征价值与财富
            case .cashVoucher1, .cashVoucher1En:
                return [
                    Color(red: 1.0, green: 0.84, blue: 0.0),  // 纯金色
                    Color(red: 0.85, green: 0.65, blue: 0.13) // 深金色
                ]
                
            // 现金券 2 - 银色渐变，象征优雅与品质
            case .cashVoucher2, .cashVoucher2En:
                return [
                    Color(red: 0.75, green: 0.75, blue: 0.75), // 亮银色
                    Color(red: 0.5, green: 0.5, blue: 0.5)     // 深银色
                ]
                
            // 现金券 3 - 橙色渐变，象征活力与热情
            case .cashVoucher3, .cashVoucher3En:
                return [
                    Color(red: 1.0, green: 0.65, blue: 0.0),  // 亮橙色
                    Color(red: 0.9, green: 0.45, blue: 0.0)   // 深橙色
                ]
            }
        }
        
        /// 获取标签背景颜色 - 与卡片渐变色接近的配色
        var tagBackgroundColor: Color {
            switch self {
            // 使用渐变色的较亮版本作为Tag背景
            case .mysteryGift, .mysteryGiftEn:
                return Color(red: 0.5, green: 0.3, blue: 0.7) // 基于神秘紫的亮版
            case .weekendSpecial, .weekendSpecialEn:
                return Color(red: 0.4, green: 0.6, blue: 1.0) // 基于深蓝的亮版
            case .welcomeCoffee, .welcomeCoffeeEn:
                return Color(red: 0.8, green: 0.6, blue: 0.4) // 基于咖啡棕的亮版
            case .newMemberDiscount, .newMemberDiscountEn:
                return Color(red: 1.0, green: 0.7, blue: 0.3) // 基于活力橙的亮版
            case .fuelUpStreak, .fuelUpStreakEn:
                return Color(red: 1.0, green: 0.4, blue: 0.2) // 基于火焰红的亮版
            case .birthdaySpecial, .birthdaySpecialEn:
                return Color(red: 1.0, green: 0.5, blue: 0.8) // 基于庆祝粉的亮版
            case .memberInfoComplete, .memberInfoCompleteEn:
                return Color(red: 0.3, green: 0.8, blue: 0.6) // 基于清新绿的亮版
            case .highballSpecial, .highballSpecialEn:
                return Color(red: 0.9, green: 0.7, blue: 0.3) // 基于琥珀金的亮版
            case .vibeRegentExclusive, .vibeRegentExclusiveEn:
                return Color(red: 0.6, green: 0.3, blue: 0.9) // 基于皇室紫的亮版
            case .hypeBlaze, .hypeBlazeEn:
                return Color(red: 1.0, green: 0.6, blue: 0.1) // 基于炽热橙的亮版
            case .cashVoucher1, .cashVoucher1En:
                return Color(red: 0.7, green: 0.6, blue: 0.1) // 调暗的金色背景
            case .cashVoucher2, .cashVoucher2En:
                return Color(red: 0.5, green: 0.5, blue: 0.5) // 调暗的银色背景
            case .cashVoucher3, .cashVoucher3En:
                return Color(red: 0.7, green: 0.45, blue: 0.1) // 调暗的橙色背景
            }
        }
        
        /// 获取按钮背景颜色 - 与卡片渐变色接近的配色
        var buttonBackgroundColor: Color {
            switch self {
            // 使用渐变色的深色版本作为按钮背景
            case .mysteryGift, .mysteryGiftEn:
                return Color(red: 0.3, green: 0.15, blue: 0.5) // 基于神秘紫的深版
            case .weekendSpecial, .weekendSpecialEn:
                return Color(red: 0.2, green: 0.4, blue: 0.8) // 基于深蓝的深版
            case .welcomeCoffee, .welcomeCoffeeEn:
                return Color(red: 0.6, green: 0.4, blue: 0.25) // 基于咖啡棕的深版
            case .newMemberDiscount, .newMemberDiscountEn:
                return Color(red: 0.9, green: 0.5, blue: 0.15) // 基于活力橙的深版
            case .fuelUpStreak, .fuelUpStreakEn:
                return Color(red: 0.8, green: 0.15, blue: 0.05) // 基于火焰红的深版
            case .birthdaySpecial, .birthdaySpecialEn:
                return Color(red: 0.9, green: 0.3, blue: 0.6) // 基于庆祝粉的深版
            case .memberInfoComplete, .memberInfoCompleteEn:
                return Color(red: 0.15, green: 0.6, blue: 0.4) // 基于清新绿的深版
            case .highballSpecial, .highballSpecialEn:
                return Color(red: 0.7, green: 0.5, blue: 0.15) // 基于琥珀金的深版
            case .vibeRegentExclusive, .vibeRegentExclusiveEn:
                return Color(red: 0.4, green: 0.15, blue: 0.7) // 基于皇室紫的深版
            case .hypeBlaze, .hypeBlazeEn:
                return Color(red: 0.9, green: 0.4, blue: 0.05) // 基于炽热橙的深版
            case .cashVoucher1, .cashVoucher1En:
                return Color(red: 0.8, green: 0.65, blue: 0.0) // 基于金色的深版
            case .cashVoucher2, .cashVoucher2En:
                return Color(red: 0.4, green: 0.4, blue: 0.4) // 基于银色的深版
            case .cashVoucher3, .cashVoucher3En:
                return Color(red: 0.8, green: 0.5, blue: 0.0) // 基于橙色的深版
            }
        }
        
        /// 获取文本颜色
        var textColor: Color {
            switch self {
            // 深色背景使用白色文本
            case .mysteryGift, .mysteryGiftEn, .weekendSpecial, .weekendSpecialEn, .welcomeCoffee, .welcomeCoffeeEn:
                return Color.white
            // 其他使用白色文本（因为大部分是深色渐变）
            default:
                return Color.white
            }
        }
        
        /// 获取标签文本颜色 - 与Tag背景色形成对比
        var tagTextColor: Color {
            switch self {
            // 深色Tag背景使用白色文字
            case .mysteryGift, .mysteryGiftEn:
                return Color.white
            case .weekendSpecial, .weekendSpecialEn:
                return Color.white
            case .welcomeCoffee, .welcomeCoffeeEn:
                return Color.white
            case .memberInfoComplete, .memberInfoCompleteEn:
                return Color.white
            case .highballSpecial, .highballSpecialEn:
                return Color.white
            case .vibeRegentExclusive, .vibeRegentExclusiveEn:
                return Color.white
            
            // 根据用户要求，New Member Discount和Birthday Month Exclusive改为白色文字
            case .newMemberDiscount, .newMemberDiscountEn:
                return Color.white
            case .birthdaySpecial, .birthdaySpecialEn:
                return Color.white
            
            // 其他亮色Tag背景使用深色文字
            case .fuelUpStreak, .fuelUpStreakEn:
                return Color.white
            case .hypeBlaze, .hypeBlazeEn:
                return Color.white
            case .cashVoucher1, .cashVoucher1En:
                return Color.white // 调暗金色背景用白色文字
            case .cashVoucher2, .cashVoucher2En:
                return Color.white // 调暗银色背景用白色文字
            case .cashVoucher3, .cashVoucher3En:
                return Color.white // 调暗橙色背景用白色文字
            }
        }
        
        /// 获取按钮文本颜色 - 与按钮背景色形成对比
        var buttonTextColor: Color {
            // 所有按钮背景都是深色，统一使用白色文字确保最佳对比度
            return Color.white
        }
        
        /// 获取副标题文本颜色
        var subtitleColor: Color {
            return textColor.opacity(0.8)
        }
        
        /// 获取图标颜色
        var iconColor: Color {
            return textColor
        }
    }
    
    /// 根据优惠券标题智能匹配类型 - 支持中英文模糊匹配
    static func getCouponType(from title: String) -> CouponType {
        // 优先匹配完整标题
        if let type = CouponType.allCases.first(where: { $0.rawValue == title }) {
            return type
        }
        
        // 模糊匹配关键词 - 支持中英文
        let lowercaseTitle = title.lowercased()
        
        // 新会员系列
        if lowercaseTitle.contains("新会员") || lowercaseTitle.contains("new member") {
            return .newMemberDiscount
        }
        // 燃动打卡系列
        else if lowercaseTitle.contains("燃动") || lowercaseTitle.contains("打卡") || 
                lowercaseTitle.contains("fuel") || lowercaseTitle.contains("streak") {
            return .fuelUpStreak
        }
        // 周末专享系列
        else if lowercaseTitle.contains("周末") || lowercaseTitle.contains("weekend") {
            return .weekendSpecial
        }
        // HighBall专享系列
        else if lowercaseTitle.contains("highball") || lowercaseTitle.contains("high ball") ||
                lowercaseTitle.contains("鸡尾酒") {
            return .highballSpecial
        }
        // 咖啡系列
        else if lowercaseTitle.contains("咖啡") || lowercaseTitle.contains("coffee") {
            return .welcomeCoffee
        }
        // 神秘礼品系列
        else if lowercaseTitle.contains("神秘") || lowercaseTitle.contains("mystery") ||
                lowercaseTitle.contains("礼品") || lowercaseTitle.contains("gift") {
            return .mysteryGift
        }
        // 生日专享系列
        else if lowercaseTitle.contains("生日") || lowercaseTitle.contains("birthday") {
            return .birthdaySpecial
        }
        // 会员信息完善系列
        else if lowercaseTitle.contains("信息") || lowercaseTitle.contains("完善") ||
                lowercaseTitle.contains("info") || lowercaseTitle.contains("completion") {
            return .memberInfoComplete
        }
        // 紫域主理人系列
        else if lowercaseTitle.contains("紫域") || lowercaseTitle.contains("主理人") ||
                lowercaseTitle.contains("vibe") || lowercaseTitle.contains("regent") {
            return .vibeRegentExclusive
        }
        // 橙燃玩家系列
        else if lowercaseTitle.contains("橙燃") || lowercaseTitle.contains("玩家") ||
                lowercaseTitle.contains("hype") || lowercaseTitle.contains("blaze") {
            return .hypeBlaze
        }
        // 现金券系列
        else if title == "现金券 1" || title == "Cash Voucher 1" {
            return .cashVoucher1
        }
        else if title == "现金券 2" || title == "Cash Voucher 2" {
            return .cashVoucher2
        }
        else if title == "现金券 3" || title == "Cash Voucher 3" {
            return .cashVoucher3
        }
        
        // 默认返回新会员优惠
        return .newMemberDiscount
    }
    
    /// 获取优惠券的标签背景颜色
    static func getTagBackgroundColor(for title: String) -> Color {
        return getCouponType(from: title).tagBackgroundColor
    }
    
    /// 获取优惠券的标签文本颜色
    static func getTagTextColor(for title: String) -> Color {
        return getCouponType(from: title).tagTextColor
    }
    
    /// 获取优惠券的按钮背景颜色
    static func getButtonBackgroundColor(for title: String) -> Color {
        return getCouponType(from: title).buttonBackgroundColor
    }
    
    /// 获取优惠券的按钮文本颜色
    static func getButtonTextColor(for title: String) -> Color {
        return getCouponType(from: title).buttonTextColor
    }
    
    /// 获取优惠券渐变色
    static func getGradientColors(for title: String) -> [Color] {
        return getCouponType(from: title).gradientColors
    }
    
    /// 获取按钮颜色
    static func getButtonColor(for title: String) -> Color {
        return getCouponType(from: title).buttonBackgroundColor
    }
    
    /// 获取文本颜色
    static func getTextColor(for title: String) -> Color {
        return getCouponType(from: title).textColor
    }
    
    /// 获取副标题颜色
    static func getSubtitleColor(for title: String) -> Color {
        return getCouponType(from: title).subtitleColor
    }
    
    /// 获取图标颜色
    static func getIconColor(for title: String) -> Color {
        return getCouponType(from: title).iconColor
    }
    
    // MARK: - 优惠券样式配置
    
    /// 卡片样式
    struct CardStyle {
        static let cornerRadius = AppTheme.Dimensions.mediumCornerRadius
        static let shadowRadius = AppTheme.Dimensions.shadowRadius
        static let shadowOffset = CGSize(width: 0, height: AppTheme.Dimensions.shadowOffsetY)
        static let shadowColor = AppTheme.Colors.shadowMedium
        static let padding = AppTheme.Dimensions.mediumPadding
        static let spacing = AppTheme.Dimensions.mediumSpacing
    }
    
    /// 按钮样式
    struct ButtonStyle {
        static let cornerRadius = AppTheme.Dimensions.extraLargeCornerRadius
        static let height = AppTheme.Dimensions.buttonHeight
        static let minWidth = AppTheme.Dimensions.buttonMinWidth
        static let font = AppTheme.Typography.calloutMedium
        static let textColor = AppTheme.Colors.primaryText
    }
    
    /// 文本样式
    struct TextStyle {
        static let titleFont = AppTheme.Typography.headline
        static let subtitleFont = AppTheme.Typography.callout
        static let descriptionFont = AppTheme.Typography.subheadline
        static let valueFont = AppTheme.Typography.title2
    }
}